package droid.frame.utils.http;

import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import droid.frame.App;

/**
 * 带缓存的图片加载
 * 
 * @author coffee<br>
 *         2016-12-27上午11:17:36
 */
public class BitmapLoader {

	/**
	 * key一般是http url
	 */
	private static LruCache<String, Bitmap> bitmapCache;

	/**
	 * 得到需要分配的缓存大小，这里用八分之一的大小来做
	 * 
	 * @return 单位 kb
	 */
	public static int getMemoryCacheSize() {
		// Get memory class of this device, exceeding this amount will throw an
		// OutOfMemory exception.
		final int memClass = ((ActivityManager) App.getContext().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();

		// Use 1/8th of the available memory for this memory cache.
		return 1024 * 1024 * memClass / 8;
	}

	/**
	 * 一般传入一个http url作为key<br>
	 * 这个方法可能会从网络加载, 不可以在UI线程中加载
	 * 
	 * @param key
	 * @return
	 */
	public static Bitmap loadNotUI(String key) {
		if (bitmapCache == null) {
			bitmapCache = new LruCache<String, Bitmap>(getMemoryCacheSize());
		}
		Bitmap bitmap = bitmapCache.get(key);
		// 内存加载
		if (bitmap != null) {
			return bitmap;
		}
		// 本地加载
		if (bitmap == null) {
			bitmap = BitmapUtils.loadBitmapFromLocal(key);
		}
		// 网络加载
		if (bitmap == null) {
			bitmap = BitmapUtils.loadBitmapFromNet(key);
		}
		if (bitmap != null) {
			// 加入缓存
			bitmapCache.put(key, bitmap);
		}
		return bitmap;
	}

}
